package pe.edu.claretiano.admisionmatricula.matricula.daoimpl;

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;

import pe.edu.claretiano.admisionmatricula.bean.SolicitudMatricula;
import pe.edu.claretiano.admisionmatricula.factory.MyBatisConnectionFactory;
import pe.edu.claretiano.admisionmatricula.matricula.dao.SolicitudMatriculaDao;

public class SolicitudMatriculaDaoImpl implements SolicitudMatriculaDao {
	
	private final static Logger logSolicitudMatriculaDaoImpl = Logger.getLogger(SolicitudMatriculaDaoImpl.class);

	private SqlSessionFactory sqlSessionFactory;

	public SolicitudMatriculaDaoImpl() {
		sqlSessionFactory = MyBatisConnectionFactory.getSqlSessionFactory();
	}

	@Override
	public List<SolicitudMatricula> listarSolicitudMatricula(SolicitudMatricula solicitudMatricula) {
		SqlSession session = sqlSessionFactory.openSession();
		List<SolicitudMatricula> lstSolicitudMatricula = new ArrayList<SolicitudMatricula>();
		
		try {
			lstSolicitudMatricula = (List<SolicitudMatricula>) session.selectList("SolicitudMatricula.listarSolicitudMatricula", solicitudMatricula);
		} catch (Exception ex) {
			logSolicitudMatriculaDaoImpl.error(ex.getMessage());
		} finally {
			session.close();
		}
		return lstSolicitudMatricula;
	}

	@Override
	public SolicitudMatricula obtenerSolicitudMatricula(SolicitudMatricula solicitudMatricula) {
		
		SqlSession session = sqlSessionFactory.openSession();
		SolicitudMatricula solicitudMat = null;
		try {
			solicitudMat = (SolicitudMatricula) session.selectOne("SolicitudMatricula.obtenerSolicitudMatricula",solicitudMatricula);
		} catch (Exception ex) {
			logSolicitudMatriculaDaoImpl.error(ex.getMessage());
		} finally {
			session.close();
		}
		
		return solicitudMat;
	}

	@Override
	public Integer insertarSolicitudMatricula(SolicitudMatricula solicitudMatricula) {
			SqlSession session = sqlSessionFactory.openSession();
			Integer resultado = 0;
			try {
				resultado = session.insert("SolicitudMatricula.insertarSolicitudMatricula",solicitudMatricula);
				session.commit();
			} catch (Exception ex) {
				logSolicitudMatriculaDaoImpl.error(ex.getMessage());
				session.rollback();
			} finally {
				session.close();
			}
			return resultado;
	}

	@Override
	public void actualizarNumeroSolicitud(SolicitudMatricula solicitudMatricula) {
		SqlSession session = sqlSessionFactory.openSession();
		try {
			session.update("SolicitudMatricula.updateNumeroSolicitud",solicitudMatricula);
			session.commit();
		} catch (Exception ex) {
			logSolicitudMatriculaDaoImpl.error(ex.getMessage());
			session.rollback();
		} finally {
			session.close();
		}
		
	}

	@Override
	public Integer actualizarSolicitudMatricula(SolicitudMatricula solicitudMatricula) {
		SqlSession session = sqlSessionFactory.openSession();
		Integer resultado = 0;
		try {
			resultado = session.update("SolicitudMatricula.actualizarSolicituMatricula",solicitudMatricula);
			session.commit();
		} catch (Exception ex) {
			logSolicitudMatriculaDaoImpl.error(ex.getMessage());
			session.rollback();
		} finally {
			session.close();
		}
		return resultado;
	}

	@Override
	public SolicitudMatricula obtenerNuevaSolicitudMatricula(SolicitudMatricula solicitudMatricula) {
		SqlSession session = sqlSessionFactory.openSession();
		SolicitudMatricula solicitudMat = null;
		try {
			solicitudMat = (SolicitudMatricula) session.selectOne("SolicitudMatricula.obtenerNuevaSolicitudMatricula",solicitudMatricula);
		} catch (Exception ex) {
			logSolicitudMatriculaDaoImpl.error(ex.getMessage());
		} finally {
			session.close();
		}
		
		return solicitudMat;
	}

	@Override
	public SolicitudMatricula obtenerSolicitudMatriculaRegistrado(SolicitudMatricula solicitudMatricula) {
		SqlSession session = sqlSessionFactory.openSession();
		SolicitudMatricula solicitudMat = null;
		try {
			solicitudMat = (SolicitudMatricula) session.selectOne("SolicitudMatricula.obtenerSolicitudMatRegistrada",solicitudMatricula);
		} catch (Exception ex) {
			logSolicitudMatriculaDaoImpl.error(ex.getMessage());
		} finally {
			session.close();
		}
		
		return solicitudMat;
	}

}
